import os
import shutil


def move_all_txt_to_root(source_dir):
    """
    将指定目录下所有子文件夹中的TXT标签文件移动到根目录
    :param source_dir: 源目录路径
    """
    # 确保源目录存在
    if not os.path.exists(source_dir):
        print(f"目录不存在: {source_dir}")
        return

    # 计数器
    moved_files = 0
    skipped_files = 0

    # 遍历源目录下的所有文件和子目录
    for root, dirs, files in os.walk(source_dir):
        # 跳过根目录本身
        if root == source_dir:
            continue

        # 处理当前目录下的所有TXT文件
        for file in files:
            if file.lower().endswith('.txt'):
                src_path = os.path.join(root, file)
                dst_path = os.path.join(source_dir, file)

                # 处理目标文件名冲突
                counter = 1
                base_name, ext = os.path.splitext(file)
                while os.path.exists(dst_path):
                    dst_path = os.path.join(source_dir, f"{base_name}_{counter}{ext}")
                    counter += 1

                # 移动文件
                try:
                    shutil.move(src_path, dst_path)
                    print(f"已移动: {src_path} -> {dst_path}")
                    moved_files += 1
                except Exception as e:
                    print(f"移动文件失败: {src_path}, 错误: {e}")
                    skipped_files += 1

    print(f"\n操作完成: 共移动 {moved_files} 个文件, 跳过 {skipped_files} 个文件")


if __name__ == "__main__":
    # 指定源目录
    source_directory = r"D:\show\labels"

    # 执行移动操作
    move_all_txt_to_root(source_directory)